"""
备牙数据学习曲线分析工具 - 演示脚本
Demo Script for Learning Curve Analyzer

此脚本展示了如何使用分析工具的各项功能
"""

import os
import sys
import subprocess
import time

def print_header(title):
    """打印标题"""
    print("\n" + "="*60)
    print(f"  {title}")
    print("="*60)

def print_step(step, description):
    """打印步骤"""
    print(f"\n📋 步骤 {step}: {description}")
    print("-" * 40)

def run_command(cmd, description=""):
    """运行命令并显示结果"""
    if description:
        print(f"🚀 {description}")
    print(f"💻 执行命令: {' '.join(cmd)}")
    
    try:
        result = subprocess.run(cmd, capture_output=True, text=True, encoding='utf-8')
        
        if result.returncode == 0:
            print("✅ 命令执行成功")
            if result.stdout:
                print("📄 输出信息:")
                print(result.stdout)
        else:
            print("❌ 命令执行失败")
            if result.stderr:
                print("🔴 错误信息:")
                print(result.stderr)
        
        return result.returncode == 0
        
    except FileNotFoundError:
        print("❌ 命令不存在或无法执行")
        return False
    except Exception as e:
        print(f"❌ 执行异常: {e}")
        return False

def check_files():
    """检查必要文件"""
    required_files = [
        'curve_calc_all.py',
        'extractor.py',
        'requirements.txt'
    ]
    
    print("🔍 检查必要文件...")
    all_exist = True
    
    for file in required_files:
        if os.path.exists(file):
            print(f"✅ {file}")
        else:
            print(f"❌ {file} (缺失)")
            all_exist = False
    
    return all_exist

def create_sample_data():
    """创建示例数据"""
    print("📊 创建示例数据文件...")
    
    # 创建IR组示例数据
    ir_data = """85.2,87.1,89.5,91.2,92.8
78.5,82.3,85.7,87.9
90.1,92.4,94.8,96.2,97.5
75.0,80.5,84.2,87.0,89.3,91.1
82.7,85.9,88.4,90.7,92.5"""
    
    with open('IR组_demo.csv', 'w', encoding='utf-8') as f:
        f.write(ir_data)
    print("✅ 创建了 IR组_demo.csv")
    
    # 创建MR组示例数据
    mr_data = """80.3,83.7,86.2,88.5,90.1
72.8,77.5,81.3,84.2
86.4,89.1,91.7,93.8,95.2
71.5,76.8,80.9,84.1,86.7,88.9
79.2,82.6,85.8,88.3,90.5"""
    
    with open('MR组_demo.csv', 'w', encoding='utf-8') as f:
        f.write(mr_data)
    print("✅ 创建了 MR组_demo.csv")
    
    return True

def demo_single_analysis():
    """演示单组分析"""
    print_step(1, "单组预测分析演示")
    
    cmd = [
        'python', 'curve_calc_all.py',
        '--mode', 'single',
        '--single_file', 'IR组_demo.csv',
        '--max_training', '25',
        '--title', 'IR组学习曲线预测演示'
    ]
    
    return run_command(cmd, "运行单组预测分析")

def demo_compare_analysis():
    """演示对比分析"""
    print_step(2, "两组对比分析演示")
    
    cmd = [
        'python', 'curve_calc_all.py',
        '--mode', 'compare',
        '--ir_file', 'IR组_demo.csv',
        '--mr_file', 'MR组_demo.csv',
        '--max_training', '25',
        '--title', 'IR组与MR组对比分析演示'
    ]
    
    return run_command(cmd, "运行两组对比分析")

def demo_gui():
    """演示GUI界面"""
    print_step(3, "图形界面演示")
    
    if os.path.exists('simple_gui.py'):
        print("🖥️ 启动图形界面...")
        print("💡 GUI将在新窗口中打开，您可以:")
        print("   • 加载演示数据文件")
        print("   • 尝试不同的分析模式")
        print("   • 查看实时分析日志")
        print("   • 管理生成的文件")
        
        try:
            # 非阻塞方式启动GUI
            subprocess.Popen(['python', 'simple_gui.py'])
            print("✅ GUI已启动")
            return True
        except Exception as e:
            print(f"❌ GUI启动失败: {e}")
            return False
    else:
        print("❌ GUI文件 simple_gui.py 不存在")
        return False

def show_results():
    """显示生成的结果文件"""
    print_step(4, "查看生成的结果")
    
    result_files = [
        'IR组_demo_learning_curves.png',
        'IR组_demo_预测结果.csv',
        'IR_MR_average_learning_curves.png',
        'IR_MR_average_comparison.csv'
    ]
    
    print("📁 生成的文件:")
    for file in result_files:
        if os.path.exists(file):
            size = os.path.getsize(file)
            print(f"✅ {file} ({size:,} 字节)")
        else:
            print(f"❌ {file} (未生成)")

def cleanup_demo_files():
    """清理演示文件"""
    print("\n🗑️ 清理演示文件...")
    
    demo_files = [
        'IR组_demo.csv',
        'MR组_demo.csv',
        'IR组_demo_learning_curves.png',
        'IR组_demo_预测结果.csv',
        'IR_MR_average_learning_curves.png',
        'IR_MR_average_comparison.csv'
    ]
    
    for file in demo_files:
        if os.path.exists(file):
            try:
                os.remove(file)
                print(f"🗑️ 删除了 {file}")
            except Exception as e:
                print(f"❌ 无法删除 {file}: {e}")

def main():
    """主演示流程"""
    print_header("备牙数据学习曲线分析工具 - 功能演示")
    
    print("""
🎯 演示内容:
1. 检查环境和依赖
2. 创建示例数据
3. 单组预测分析
4. 两组对比分析  
5. 图形界面展示
6. 查看生成结果

💡 提示: 请确保已安装所有依赖包
    """)
    
    # 询问是否继续
    response = input("是否开始演示? (y/N): ").strip().lower()
    if response not in ['y', 'yes', '是']:
        print("演示已取消")
        return
    
    try:
        # 检查文件
        if not check_files():
            print("\n❌ 缺少必要文件，无法继续演示")
            return
        
        # 创建示例数据
        if not create_sample_data():
            print("\n❌ 无法创建示例数据")
            return
        
        # 单组分析演示
        success1 = demo_single_analysis()
        time.sleep(2)
        
        # 对比分析演示
        success2 = demo_compare_analysis()
        time.sleep(2)
        
        # GUI演示
        demo_gui()
        
        # 显示结果
        show_results()
        
        # 总结
        print_header("演示完成")
        
        if success1 and success2:
            print("🎉 所有分析功能演示成功!")
            print("\n📊 您可以查看生成的图表和数据文件")
            print("🖥️ 也可以使用GUI界面进行交互式分析")
        else:
            print("⚠️ 部分功能演示失败，请检查依赖和环境")
        
        print("\n💻 命令行使用示例:")
        print("python curve_calc_all.py --help")
        print("\n🖥️ GUI界面启动:")
        print("python simple_gui.py")
        
        # 询问是否清理
        cleanup_response = input("\n是否清理演示文件? (y/N): ").strip().lower()
        if cleanup_response in ['y', 'yes', '是']:
            cleanup_demo_files()
        
    except KeyboardInterrupt:
        print("\n\n⏹️ 演示被用户中断")
    except Exception as e:
        print(f"\n❌ 演示过程中出现异常: {e}")

if __name__ == "__main__":
    main()
